#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
语音命令处理器 - 复杂指令处理演示脚本

本脚本演示了如何使用VoiceCommandProcessor处理复杂的多步骤语音指令，
结合大模型实现对电脑的高级语音操控功能。
"""

import os
import json
import time
import logging

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

def clear_screen():
    """清屏函数"""
    os.system('cls' if os.name == 'nt' else 'clear')

def pause():
    """暂停函数"""
    input("\n按回车键继续...")

def print_title():
    """打印标题"""
    clear_screen()
    print("=" * 60)
    print("欢迎使用 语音命令处理器 - 复杂指令处理演示".center(50))
    print("=" * 60)
    print()

def print_section(title):
    """打印章节标题"""
    print("-" * 60)
    print(f"【{title}】")
    print("-" * 60)

def demo_simple_command(processor):
    """演示简单命令处理"""
    print_section("1. 简单命令处理")
    commands = [
        "打开记事本",
        "输入文本 'Hello World!'",
        "告诉我是否成功"
    ]
    
    for cmd in commands:
        print(f"\n执行命令: {cmd}")
        try:
            result = processor.process_command(cmd)
            print(f"结果: {result}")
        except Exception as e:
            print(f"错误: {str(e)}")
        time.sleep(1)
    
    pause()

def demo_complex_command(processor):
    """演示复杂多步骤命令处理"""
    print_section("2. 复杂多步骤命令处理")
    complex_commands = [
        "打开记事本，然后输入文本 '这是一个复杂指令测试'，最后告诉我是否成功",
        "先打开记事本，接着输入今天的日期，再保存文件"
    ]
    
    for cmd in complex_commands:
        print(f"\n执行复杂命令: {cmd}")
        try:
            result = processor.process_command(cmd)
            print(f"结果: {result}")
        except Exception as e:
            print(f"错误: {str(e)}")
        time.sleep(2)
    
    pause()

def demo_text_extraction(processor):
    """演示文本提取功能"""
    print_section("3. 智能文本提取演示")
    text_commands = [
        "输入 '带单引号的文本'",
        "写入\"带双引号的文本\"",
        "打字 不带引号的普通文本",
        "请帮我输入一段超长的文本内容，这段内容非常长，包含了各种标点符号和特殊字符，用来测试系统的文本提取能力和处理性能。"
    ]
    
    for cmd in text_commands:
        print(f"\n文本提取命令: {cmd}")
        try:
            # 直接调用文本提取方法进行演示
            from voice_command_processor import _extract_text_parameters
            text = _extract_text_parameters(cmd)
            print(f"提取到的文本: {text}")
        except Exception as e:
            print(f"错误: {str(e)}")
    
    pause()

def demo_intent_recognition(processor):
    """演示意图识别功能"""
    print_section("4. 意图识别演示")
    intent_commands = [
        "打开记事本",
        "输入文本内容",
        "保存文件",
        "告诉我刚才做了什么",
        "查询系统状态"
    ]
    
    for cmd in intent_commands:
        print(f"\n识别命令意图: {cmd}")
        try:
            # 假设处理器有这个方法或属性
            if hasattr(processor, 'intent_extractor'):
                intent, confidence = processor.intent_extractor.extract_intent(cmd)
                print(f"识别结果: 意图={intent}, 置信度={confidence:.2f}")
            else:
                print("意图提取器不可用")
        except Exception as e:
            print(f"错误: {str(e)}")
    
    pause()

def demo_state_query(processor):
    """演示状态查询功能"""
    print_section("5. 状态查询演示")
    # 先执行一些命令以生成历史记录
    print("执行一些命令以生成历史记录...")
    try:
        processor.process_command("输入 '测试文本'")
        time.sleep(1)
        
        query_commands = [
            "告诉我是否成功",
            "操作完成了吗",
            "刚才执行了什么命令",
            "结果如何"
        ]
        
        for cmd in query_commands:
            print(f"\n状态查询: {cmd}")
            result = processor.process_command(cmd)
            print(f"响应: {result}")
    except Exception as e:
        print(f"错误: {str(e)}")
    
    pause()

def demo_llm_enhanced(processor_with_llm, processor_without_llm):
    """演示大模型增强功能对比"""
    print_section("6. 大模型增强功能对比")
    complex_commands = [
        "创建一个新的文本文档，写入今天的日期和天气，然后保存到桌面",
        "帮我整理一下昨天的工作记录，按时间顺序排序",
        "如果今天是工作日，打开我的工作计划文件；如果是周末，打开休闲娱乐文件夹"
    ]
    
    for cmd in complex_commands:
        print(f"\n复杂命令: {cmd}")
        
        print("\n不带大模型增强:")
        try:
            result_no_llm = processor_without_llm.process_command(cmd)
            print(f"响应: {result_no_llm}")
        except Exception as e:
            print(f"错误: {str(e)}")
        
        print("\n带大模型增强:")
        try:
            result_with_llm = processor_with_llm.process_command(cmd)
            print(f"响应: {result_with_llm}")
        except Exception as e:
            print(f"错误: {str(e)}")
        
        time.sleep(2)
    
    pause()

def run_interactive_mode(processor):
    """运行交互式模式"""
    print_section("7. 交互式模式")
    print("进入交互式命令模式。输入 'exit' 退出，输入 'help' 查看帮助。")
    print("\n示例命令:")
    print("  - 打开记事本")
    print("  - 输入 '测试文本'")
    print("  - 打开记事本，然后输入当前时间，最后告诉我是否成功")
    print("  - 告诉我刚才做了什么")
    
    while True:
        print("\n> ", end="")
        cmd = input().strip()
        
        if cmd.lower() == 'exit':
            break
        elif cmd.lower() == 'help':
            print("\n可用命令:")
            print("  - 应用控制: 打开/关闭 应用名称")
            print("  - 文本处理: 输入/写入/打字 文本内容")
            print("  - 复杂指令: 使用 '然后'、'接着' 等连接多个步骤")
            print("  - 状态查询: 告诉我是否成功、操作完成了吗 等")
            print("  - exit: 退出交互式模式")
            print("  - help: 显示此帮助信息")
            continue
        
        try:
            result = processor.process_command(cmd)
            print(f"响应: {result}")
        except Exception as e:
            print(f"错误: {str(e)}")

def main():
    """主函数"""
    print_title()
    
    print("正在初始化语音命令处理器...")
    try:
        # 导入并初始化处理器
        from voice_command_processor import VoiceCommandProcessor
        
        # 创建两个处理器实例用于对比演示
        processor_with_llm = VoiceCommandProcessor(use_llm=True)
        processor_without_llm = VoiceCommandProcessor(use_llm=False)
        
        print("初始化完成！\n")
        
        # 运行各个演示部分
        try:
            demo_simple_command(processor_with_llm)
            demo_complex_command(processor_with_llm)
            demo_text_extraction(processor_with_llm)
            demo_intent_recognition(processor_with_llm)
            demo_state_query(processor_with_llm)
            demo_llm_enhanced(processor_with_llm, processor_without_llm)
            run_interactive_mode(processor_with_llm)
        except KeyboardInterrupt:
            print("\n演示已取消")
            
    except ImportError as e:
        print(f"错误: 无法导入VoiceCommandProcessor模块 - {str(e)}")
        print("请确保voice_command_processor.py文件在当前目录下。")
        return
    except Exception as e:
        print(f"初始化错误: {str(e)}")
        return
    
    print("\n\n演示完成！")
    print("感谢使用语音命令处理器 - 复杂指令处理演示。")

if __name__ == "__main__":
    main()